/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pooproj.repositorio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import pooproj.basica.Categoria;
import pooproj.erro.ConexaoException;
import pooproj.erro.ConsultaException;
import pooproj.util.GerenciadorConexao;
import pooproj.util.GerenciadorConexaoImpl;

/**
 *
 * @author Daniella
 */
public class RepositorioCategoriaImpl implements RepositorioCategoria{
    
    //obter a instância utilizada para qualquer método desta classe
    private GerenciadorConexao gc = GerenciadorConexaoImpl.getInstancia();


    @Override
    public void inserir(Categoria cat) throws ConsultaException, ConexaoException {
        Connection con = gc.conectar();
        String sql = "INSERT INTO categoria (nomeCateg) VALUES (?)";
        
        try{
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setString(1,cat.getNomeCateg());
            pstm.executeUpdate();
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        } finally {
            gc.desconectar(con);
        }
    }

    @Override
    public void alterar(Categoria cat) throws ConsultaException, ConexaoException {
        Connection con = gc.conectar();
        String sql = "UPDATE categoria SET nomeCateg=? WHERE codCateg=?";
        
        try{
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setString(1, cat.getNomeCateg());
            pstm.setInt(2, cat.getCodCateg());
            pstm.executeUpdate();
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        } finally {
            gc.desconectar(con);
        }
    }

    @Override
    public void excluir(Categoria cat) throws ConsultaException, ConexaoException {
        Connection con = gc.conectar();
        String sql = "DELETE FROM categoria WHERE codCateg=?";
        
        try{
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setInt(1, cat.getCodCateg());
            pstm.executeUpdate();
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        } finally {
            gc.desconectar(con);
        }
    }        
    
    @Override
    public ArrayList<Categoria> listar() throws ConsultaException, ConexaoException {
        ArrayList<Categoria> lista = new ArrayList();
        Categoria cat;
        Connection con = gc.conectar();
        String sql = "SELECT codCateg, nomeCateg FROM categoria";
        
        try{
            Statement stm = con.createStatement();
            ResultSet rs = stm.executeQuery(sql);//usado para SELECT
            while(rs.next()){
                cat = new Categoria();
                cat.setCodCateg(rs.getInt("codCateg"));
                cat.setNomeCateg(rs.getString("nomeCateg"));
                lista.add(cat);
            }
            stm.close();
            rs.close();
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        }
         return lista;
    }

    @Override
    public Categoria consultar(Integer id) throws ConsultaException, ConexaoException {
        Categoria cat = null;
        Connection con =  gc.conectar();
        String sql = "SELECT codCateg, nomeCateg FROM categoria WHERE codCateg=?";
        
        try{
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setInt(1, id);
            ResultSet rs = pstm.executeQuery();//usado para SELECT
            if(rs.next()){
                cat = new Categoria();
                cat.setCodCateg(rs.getInt("codCateg"));
                cat.setNomeCateg(rs.getString("nomeCateg"));
            }
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        } finally {
            gc.desconectar(con);
        }
        return cat;
    }

    @Override
    public Categoria consultar(String nome) throws ConsultaException, ConexaoException {
        Categoria cat = null;
        Connection con =  gc.conectar();
        String sql = "SELECT codCateg, nomeCateg FROM categoria WHERE nomeCateg=?";
        
        try{
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setString(1, nome);
            ResultSet rs = pstm.executeQuery();//usado para SELECT
            if(rs.next()){
                cat = new Categoria();
                cat.setCodCateg(rs.getInt("codCateg"));
                cat.setNomeCateg(rs.getString("nomeCateg"));
            }
        } catch (SQLException e){
            throw new ConsultaException(e.getMessage());
        } finally {
            gc.desconectar(con);
        }
        return cat;
    }

}
    

